package com.hillky.config;

import com.hillky.compress.Compressor;
import com.hillky.compress.CompressorFactory;
import com.hillky.loadbalancer.LoadBalancer;
import com.hillky.serialize.Serializer;
import com.hillky.serialize.SerializerFactory;
import com.hillky.spi.SpiHandler;

import java.util.List;

public class SpiResolver {
    /**
     * 通过spi的方式加载配置项
     * @param configuration 配置上下文
     */
    public void loadFormSpi(Configuration configuration) {
        // 我的spi文件中配置了很多实现（自由定义，只能配置一个实现，还是多个）
        List<ObjectWrapper<LoadBalancer>> loadBalancerWrappers = SpiHandler.getList(LoadBalancer.class);
        // 将其放入工程
        if(loadBalancerWrappers!=null||loadBalancerWrappers.size()>0){
            configuration.setLoadBalancer(loadBalancerWrappers.get(0).getImpl());
        }

        List<ObjectWrapper<Compressor>> objectWrappers = SpiHandler.getList(Compressor.class);
        if(objectWrappers!=null){
           objectWrappers.forEach(objectObjectWrapper -> {
               CompressorFactory.addCompressor(objectObjectWrapper);
           });
        }


        List<ObjectWrapper<Serializer>> objectWrapperList = SpiHandler.getList(Serializer.class);
        if(objectWrapperList!=null){
            objectWrapperList.forEach(objectWrapper->{
                SerializerFactory.addSerializer(objectWrapper);
            });
        }

    }
}
